/*
 * File:   Mapa.cpp
 * Author: jimena2
 *
 * Created on 28 de mayo de 2011, 01:11 PM
 */

#include "../headers/Mapa.h"

Mapa::Mapa() {

    this->nombre = new char[1];
    this->nombre[0]= '\0';
 //   territorios= new Dictionary();//no me funcaaaaaa
}

Mapa::Mapa(const Mapa& m) {
    int largo= strlen(m.nombre);
    this->nombre= new char[largo+1];
    strcpy(this->nombre,m.nombre);
    this->territorios= m.territorios;
}


dataMapa* Mapa::getDataMapa(){


}

Mapa* Mapa::crear(char* nomM, ICollection* lterritorios,ICollection* adyacentes){
//hacerrr!!!
    cout<<"crear: estoy en mapa\n";
    //recorro territorios y por cada elemento creo un territorio y lo agrego
    //a la coleccion de territorios del mapa
    Territorio* t;
    String* terr;
    claveString* key;
    IIterator* iterator;
    iterator= lterritorios->getIterator();
    while(iterator->hasCurrent()){
        terr= (String*)iterator->getCurrent();
        //creo el territorio
        cout<<"creo el territorio\n";
        t= new Territorio(terr->getElemento());
        //agrego el territorio a la coleccion de terr del mapa
        cout<<"agrego el territorio a la coleccion de terr del mapa\n";
        key= new claveString(terr->getElemento());//la tengo q eliminar??
        cout<<"agrego a territorios...\n";
        territorios->add(key,t);
        cout<<"pase agregarlo???\n";
        iterator->next();
    }
    delete iterator;

//recorro la lista de adyacentes
    Territorio* t1;
    Territorio* t2;
    dataAdyacentes* ady;
    String* nom1;
    String* nom2;
    cout<<"recorriendo para los adyacentes\n";
    claveString* k1;
    claveString* k2;
    IIterator* iterator2;
    iterator2= adyacentes->getIterator();
    while(iterator2->hasCurrent()){
        ady= (dataAdyacentes*)iterator2->getCurrent();
        //busco en los territorios
        k1= new claveString(ady->getNom1());
        k2= new claveString(ady->getNom2());
        t1= (Territorio*)this->territorios->find(k1);
        t2= (Territorio*)this->territorios->find(k2);
        //agrego cruzados los adyacentes
        t1->agregarAdyacentes(t2);
        t2->agregarAdyacentes(t1);
        iterator2->next();
    }
    delete iterator2;

    return this;//Esto se puede????
}


char* Mapa::getNombre() const{
	return this->nombre;
}

void Mapa::setNombre(char* nom){
	//this->nombre = nom;
}

IDictionary* Mapa::getTerritorios() const{
    return this->territorios;
}

void Mapa::eliminarTerritorios(){
}

IDictionary* Mapa::listarTerritorios(){
}

Territorio Mapa::obtenerTerritorio(char* nomT){
}

IDictionary*Mapa::buscarTerritoriosDominar(char* nomTDom){
}

void Mapa::combatir(char* terr,Unidad unidAtaque){
}

Unidad Mapa::EliminarUTerrAct(bool){
}

bool Mapa::hayCombate(char*, char*){
}

Mapa::~Mapa() {
}
